<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />
  <title>EFLASK设备管理平台</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />

  <link rel="stylesheet" title="default" href="/node_modules/amis/sdk/sdk.css" />
  <link rel="stylesheet" href="/node_modules/amis/sdk/helper.css" />
  <link rel="stylesheet" href="/node_modules/amis/sdk/iconfont.css" />
  <script src="node_modules/amis/sdk/sdk.js"></script>

  <script src="node_modules/vue/dist/vue.js"></script>
  <script src="node_modules/history/umd/history.js"></script>

  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>

<body>
  <div id="root" class="app-wrapper"></div>
  <script>
    (function () {
      let amis = amisRequire('amis/embed');
      const match = amisRequire('path-to-regexp').match;

      // 如果想用 browserHistory 请切换下这处代码, 其他不用变
      // const history = History.createBrowserHistory();
      const history = History.createHashHistory();

      const app = {
        type: 'app',
        brandName: 'EFLASK-aalib',
        logo: '/public/logo.png',
        header: {
          "type": "service",
          "body": [
            {
              "type": "flex",
              "items": [
                {
                  "type": "wrapper",
                  "body": [
                    {
                      "type": "tpl",
                      "tpl": "${username}",
                      "inline": false,
                      "style": {
                      },
                      "className": "m b-dark font-bold text-primary"
                    }
                  ],
                  "style": {
                  },
                  "size": "xs"
                },
                {
                  "type": "wrapper",
                  "body": [
                    {
                      "type": "button",
                      "label": "登录",
                      "actionType": "dialog",
                      "dialog": {
                        "type": "dialog",
                        "title": "系统提示",
                        "body": [
                          {
                            "type": "form",
                            "title": "表单",
                            "body": [
                              {
                                "label": "用户",
                                "type": "input-text",
                                "name": "user"
                              },
                              {
                                "name": "password",
                                "type": "input-password",
                                "label": "密码"
                              }
                            ],
                            "api": {
                              "method": "post",
                              "url": "/api/login",
                              "dataType": "json"
                            },
                            "reload": "loged_starts"
                          }
                        ],
                        "size": "sm",
                        "closeOnEsc": false,
                        "closeOnOutside": false,
                        "showCloseButton": true,
                        "data": null
                      },
                      "block": false,
                      "level": "primary",
                      "visibleOn": "this.isloged==0"
                    }
                  ],
                  "style": {
                  },
                  "size": "xs"
                },
                {
                  "type": "wrapper",
                  "body": [
                    {
                      "type": "button",
                      "label": "注销",
                      "actionType": "ajax",
                      "dialog": {
                        "title": "系统提示",
                        "body": "对你点击了"
                      },
                      "className": "b-danger bg-danger",
                      "api": "post:/api/logout",
                      "confirmText": "是否注销登录",
                      "visibleOn": "this.isloged==1"
                    }
                  ],
                  "style": {
                  },
                  "size": "xs"
                },
                {
                  "type": "wrapper",
                  "body": [
                    {
                      "name": "log_dw",
                      "type": "button",
                      "label": "日志",
                      "actionType": "drawer",
                      "dialog": {
                        "title": "系统提示",
                        "body": "对你点击了"
                      },
                      "level": "default",
                      "drawer": {
                        "type": "drawer",
                        "title": "日志",
                        "body": [
                          {
                            "type": "log",
                            "className": "h-full",
                            "height": "this.log_dw.height",
                            "source": "/api/log"
                          }
                        ],
                        "position": "right",

                        "actions": [
                        ],
                        "bodyClassName": "m-xs p-xs"
                      },
                      "visibleOn": "this.isloged==1"
                    }
                  ]
                }
              ],
              "justify": "flex-end",
              "mobile": {
                "justify": "flex-start"
              },
              "alignItems": "center",
              "direction": "row",
              "style": {
                "marginTop": "0",
                "marginRight": "0",
                "marginBottom": "0",
                "marginLeft": "0",
                "paddingTop": "0",
                "paddingRight": "0",
                "paddingBottom": "0",
                "paddingLeft": "0"
              },
              "className": "w-full"
            }
          ],
          "messages": {
          },
          "api": "post:/api/get_uesername",
          "className": "w-full",
          "name": "loged_starts"
        },

        api: '/pages/site.json'
      };

      function normalizeLink(to, location = history.location) {
        to = to || '';

        if (to && to[0] === '#') {
          to = location.pathname + location.search + to;
        } else if (to && to[0] === '?') {
          to = location.pathname + to;
        }

        const idx = to.indexOf('?');
        const idx2 = to.indexOf('#');
        let pathname = ~idx
          ? to.substring(0, idx)
          : ~idx2
            ? to.substring(0, idx2)
            : to;
        let search = ~idx ? to.substring(idx, ~idx2 ? idx2 : undefined) : '';
        let hash = ~idx2 ? to.substring(idx2) : location.hash;

        if (!pathname) {
          pathname = location.pathname;
        } else if (pathname[0] != '/' && !/^https?\:\/\//.test(pathname)) {
          let relativeBase = location.pathname;
          const paths = relativeBase.split('/');
          paths.pop();
          let m;
          while ((m = /^\.\.?\//.exec(pathname))) {
            if (m[0] === '../') {
              paths.pop();
            }
            pathname = pathname.substring(m[0].length);
          }
          pathname = paths.concat(pathname).join('/');
        }

        return pathname + search + hash;
      }

      function isCurrentUrl(to, ctx) {
        if (!to) {
          return false;
        }
        const pathname = history.location.pathname;
        const link = normalizeLink(to, {
          ...location,
          pathname,
          hash: ''
        });

        if (!~link.indexOf('http') && ~link.indexOf(':')) {
          let strict = ctx && ctx.strict;
          return match(link, {
            decode: decodeURIComponent,
            strict: typeof strict !== 'undefined' ? strict : true
          })(pathname);
        }

        return decodeURI(pathname) === link;
      }

      let amisInstance = amis.embed(
        '#root',
        app,
        {
          location: history.location
        },
        {
          // watchRouteChange: fn => {
          //   return history.listen(fn);
          // },
          updateLocation: (location, replace) => {
            location = normalizeLink(location);
            if (location === 'goBack') {
              return history.goBack();
            } else if (
              (!/^https?\:\/\//.test(location) &&
                location ===
                history.location.pathname + history.location.search) ||
              location === history.location.href
            ) {
              // 目标地址和当前地址一样，不处理，免得重复刷新
              return;
            } else if (/^https?\:\/\//.test(location) || !history) {
              return (window.location.href = location);
            }

            history[replace ? 'replace' : 'push'](location);
          },
          jumpTo: (to, action) => {
            if (to === 'goBack') {
              return history.goBack();
            }

            to = normalizeLink(to);

            if (isCurrentUrl(to)) {
              return;
            }

            if (action && action.actionType === 'url') {
              action.blank === false
                ? (window.location.href = to)
                : window.open(to, '_blank');
              return;
            } else if (action && action.blank) {
              window.open(to, '_blank');
              return;
            }

            if (/^https?:\/\//.test(to)) {
              window.location.href = to;
            } else if (
              (!/^https?\:\/\//.test(to) &&
                to === history.pathname + history.location.search) ||
              to === history.location.href
            ) {
              // do nothing
            } else {
              history.push(to);
            }
          },
          isCurrentUrl: isCurrentUrl,
          theme: 'cxd'
        }
      );

      history.listen(state => {
        amisInstance.updateProps({
          location: state.location || state
        });
      });
    })();
  </script>
</body>

</html>